package com.stoneframe.example.algorithm;

public class NumberSort {
	
	private NumberSort(){
		super();
	}
	
	/**
	 * 冒泡排序 从小到大
	 * 比较相邻的2个元素，如果第一个比第二个大，就交换
	 * */
	public static void bubbleSort(int[] numbers){
		int temp;
		int size=numbers.length;
		for(int i=0;i<size-1;i++){
			for(int j=i+1;j<size;j++){
				if(numbers[i]<numbers[j]){
					temp=numbers[i];
					numbers[i]=numbers[j];
					numbers[j]=temp;
				}
			}
		}
	}
	
	/**
	 * 快速排序
	 * 从数列中挑出一个元素，称为基准，小的放前面，大的放后面。
	 * */
	public static void quickSort(int[] numbers,int start,int end){
		if(start<end){
			int base=numbers[start];
			int temp;
			int i=start,j=end;
			do{
				while(numbers[i]<base && i<end){
					i++;
				}
				while(numbers[j]>base && j>start){
					j--;
				}
				if(i<=j){
					temp=numbers[i];
					numbers[i]=numbers[j];
					numbers[j]=temp;
					i++;
					j--;
				}
			}while(i<=j);
			if(start<j){
				quickSort(numbers, start, j);
			}
			if(end>i){
				quickSort(numbers, i, end);
			}
		}
	}
	
	/**
	 * 选择排序
	 * 找最小元素负载起始位置
	 * */
	public static void selectSort(int[] numbers){
		int size=numbers.length;
		int temp;
		for(int i=0;i<size;i++){
			int k=i;
			for(int j=size-1;j>i;j++){
				if(numbers[j]<numbers[i]){
					k=j;
				}
			}
			temp=numbers[i];
			numbers[i]=numbers[k];
			numbers[k]=temp;
		}
	}
	
	

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr={2,3,1,4,5};
		quickSort(arr,0,arr.length-1);
		for(int i=0;i<arr.length;i++){
			System.out.println(arr[i]);
		}

	}

}
